﻿using System;

namespace InDepth2Demo.Chapter7
{
    /// <summary>
    /// 7 结束C# 2的讲解：最后的一些特性
    /// </summary>
    internal class UtilsClass
    {

    }

    // 典型的C# 1 工具类
    public sealed class NonStaticStringHelper   // 1.密封类以防止派生
    {
        private NonStaticStringHelper() { }      // 2.防止其他代码对其进行实例化

        public static string Reverse(string input)      // 3.所有的方法都是静态的
        {
            char[] chars = input.ToCharArray();
            Array.Reverse(chars);
            return new string(chars);
        }
    }
    // 1.该类是封闭的，因此不能派生子类。继承应该是一种特殊化，然而此处没有任何可特殊化的东西
    // 2.这个构造函数既然是私有的，并且从来不被使用，为什么还要添加它呢？
    // 原因是，如果你不为类提供任何构造函数，那么C#1编译器总是会提供一个公有的默认的无参数构造函数，而这里不希望出现任何可见的构造函数，所以不得不提供一个私有的。

    // 将上面的工具类转化为一个C# 2静态类
    public static class StringHelper
    {
        public static string Reverse(string input)
        {
            char[] chars = input.ToCharArray();
            Array.Reverse(input.ToCharArray());
            return new string(chars);
        }
    }

    //包含了未用字段的类
    public class FieldUsedOnlyByReflection
    {
        // 编译器警告：1>D:\Mproject\Net4Demo-master\InDepth2Demo\Chapter7\UtilsClass.cs(47,13,47,14): warning CS0169: 从不使用字段“FieldUsedOnlyByReflection.x”

#pragma warning disable CS0169 // 从不使用字段“FieldUsedOnlyByReflection.x”
        int x;
#pragma warning restore CS0169 // 从不使用字段“FieldUsedOnlyByReflection.x”
    }
}
